package sort

//合并2个有序数组
//利用归并排序的思路。此方法并非排序算法
func MergeTwoSortedArr(arr1 []int, arr2 []int) []int {
	leftLen := len(arr1)
	rightLen := len(arr2)

	if leftLen == 0 {
		return arr2
	}

	if rightLen == 0 {
		return arr1
	}

	totolLen := leftLen + rightLen
	mergedArr := make([]int, totolLen)

	var left, right, k int = 0, 0, 0
	//条件判断很重要: 判断两边均有的情况，如果一方没有元素了说明只剩下一端数组有元素了
	for ; k < totolLen && left < leftLen && right < rightLen; k++ {
		if arr1[left] < arr2[right] {
			mergedArr[k] = arr1[left]
			left++
		} else {
			mergedArr[k] = arr2[right]
			right++
		}
	}

	//左数组剩余
	for ; left < leftLen && k < totolLen; k++ {
		mergedArr[k] = arr1[left]
		left++
	}

	//右数组剩余
	for ; right < rightLen && k < totolLen; k++ {
		mergedArr[k] = arr2[right]
		right++
	}

	return mergedArr
}
